<?php

class InfoCartaSemanalController extends AweController {

    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout = '//layouts/column2';
    public $defaultAction = 'admin';

    public function filters() {
        return array(
            array('CrugeAccessControlFilter'),
        );
    }

    /**
     * Displays a particular model.
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView($id) {
        $this->render('view', array(
            'model' => $this->loadModel($id),
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate() {
        $model = new InfoCartaSemanal;
        $aux = 0;
        if (isset($_POST['InfoCartaSemanal'])) {

//                    MaestroCartaSemanal
            $model->attributes = $_POST['InfoCartaSemanal'];
            $model->fecha_inicial = Util::FormatDate($_POST['InfoCartaSemanal']['fecha_inicial'], "Y-m-d") . " 00:00:00";
            $model->fecha_fin = Util::FormatDate($_POST['InfoCartaSemanal']['fecha_fin'], "Y-m-d") . " 23:59:59";
            $institucion = Institucion::model()->findByPk((int) $_POST['InfoCartaSemanal']['nombre_CIBV']);
            $model->nombre_CIBV = $institucion['oldValues']['nombre'];
            if (isset($_POST['InfoCartaSemanal']['carta_nutricional'])) {
                $validarMaestro = false;
                $validarDetalle = false;
                if ($model->validate()) {
                    $validarMaestro = true;
                }
                if ($validarMaestro == true) {
                    foreach ($_POST['InfoCartaSemanal']['carta_nutricional'] as $key => $value) {
//                    Detalle cartaSemanal
                        $validarDetalle = CartaSemanal::model()->validateOrSaveMenuCartaSemanal($value, $key, null);
                        if ($validarDetalle == false) {
                            $validarMaestro = false;
                        }
                    }
                }
                if ($validarMaestro == true) {
                    if ($model->save()) {
                        foreach ($_POST['InfoCartaSemanal']['carta_nutricional'] as $key => $value) {
//                    Detalle cartaSemanal
                            $result = CartaSemanal::model()->validateOrSaveMenuCartaSemanal($value, $key, $model->id);
                            if ($result == false) {
                                $aux++;
                            }
                        }
                    } else {
                        Yii::app()->user->setFlash('error', "no se pudo crear el men&uacute; semanal . ");
                    }
                }
                if ($aux == 0) {
                    Yii::app()->user->setFlash('success', "Creaci&oacute;n exitosa del menu semanal!");
                    $this->redirect(array('admin'));
                } else {
                    Yii::app()->user->setFlash('error', "Inconsistencia en datos. ");
                }
            }
        }
        $submodel = new CartaNutricional('search');
        $submodel->unsetAttributes(); // clear any default values
        if (isset($_GET['CartaNutricional'])) {
            $submodel->attributes = $_GET['CartaNutricional'];
        }
        $this->render('create', array(
            'model' => $model,
            'submodel' => $submodel,
        ));
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id) {
        $model = $this->loadModel($id);
        $model->fecha_inicial = Util::cambiarInverseFormatoFecha($model->fecha_inicial);
        $model->fecha_fin = Util::cambiarInverseFormatoFecha($model->fecha_fin);
        $nombreInstitucion = Institucion::model()->findAll(array("condition" => "nombre = :nombre", "params" => array(":nombre" => $model->nombre_CIBV)));
        $model->nombre_CIBV = $nombreInstitucion[0]['oldValues']['id'];
        $aux = 0;
        if (isset($_POST['InfoCartaSemanal'])) {
//                    MaestroCartaSemanal
            $model->attributes = $_POST['InfoCartaSemanal'];
            $model->fecha_inicial = Util::FormatDate($_POST['InfoCartaSemanal']['fecha_inicial'], "Y-m-d") . " 00:00:00";
            $model->fecha_fin = Util::FormatDate($_POST['InfoCartaSemanal']['fecha_fin'], "Y-m-d") . " 23:59:59";
            $institucion = Institucion::model()->findByPk((int) $_POST['InfoCartaSemanal']['nombre_CIBV']);
            $model->nombre_CIBV = $institucion['oldValues']['nombre'];
            if (isset($_POST['InfoCartaSemanal']['carta_nutricional'])) {
                $validarMaestro = false;
                $validarDetalle = false;
                if ($model->validate()) {
                    $validarMaestro = true;
                }
                if ($validarMaestro == true) {
                    foreach ($_POST['InfoCartaSemanal']['carta_nutricional'] as $carta_nutricional_id => $cartasemanal) {
                        foreach ($cartasemanal as $carta_semanal_id => $dia_semana) {
//                    Detalle cartaSemanal
                            $validarDetalle = CartaSemanal::model()->validateOrUpdateMenuCartaSemanal($carta_semanal_id, $carta_nutricional_id, true);
                            if ($validarDetalle == false) {
                                $validarMaestro = false;
                            }
                        }
                    }
                }
                if ($validarMaestro == true) {
                    if ($model->save()) {
                        foreach ($_POST['InfoCartaSemanal']['carta_nutricional'] as $carta_nutricional_id => $cartasemanal) {
                            foreach ($cartasemanal as $carta_semanal_id => $dia_semana) {
//                    Detalle cartaSemanal
                                $result = CartaSemanal::model()->validateOrUpdateMenuCartaSemanal($carta_semanal_id, $carta_nutricional_id, false);
                                if ($result == false) {
                                    $aux++;
                                }
                            }
                        }
                    } else {
                        Yii::app()->user->setFlash('error', "no se pudo actualizar el men&uacute; semanal . ");
                        $this->redirect(array('admin'));
                    }
                }
                if ($aux == 0) {
                    Yii::app()->user->setFlash('success', "Actualizaci&oacute;n exitosa del men&uacute; semanal!");
                    $this->redirect(array('admin'));
                } else {
                    Yii::app()->user->setFlash('error', "Inconsistencia en datos. ");
                    $this->redirect(array('admin'));
                }
            }
        }
        $submodel = new CartaNutricional('search');
        $submodel->unsetAttributes(); // clear any default values
        if (isset($_GET['CartaNutricional'])) {
            $submodel->attributes = $_GET['CartaNutricional'];
        }

        $this->render('update', array(
            'model' => $model,
            'submodel' => $submodel,
        ));
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($id) {
        if (Yii::app()->request->isPostRequest) {
            // we only allow deletion via POST request
            $this->loadModel($id)->delete();

            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
            if (!isset($_GET['ajax']))
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
        } else
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }

    /**
     * Manages all models.
     */
    public function actionAdmin() {
        $model = new InfoCartaSemanal('search');
        $model->unsetAttributes(); // clear any default values
        $query = $model->contarDatos();
        if ($query > 0) {
            $columns = $model->searchColumns();
            $widget = $this->createWidget('ext.EDataTables.EDataTables', array(
                'id' => 'carta-nutricional-grid',
                'template' => '{items}{summary}{pager}',
                'dataProvider' => Yii::app()->user->checkAccess("admin") || Yii::app()->user->checkAccess("supervisor") ||
                Yii::app()->user->checkAccess("nutricion") ? $model->search($columns) : $model->pertenece_al_cibv()->search($columns),
                'itemsCssClass' => 'table table-striped table-hover compact row-border',
                'ajaxUrl' => $this->createUrl($this->getAction()->getId()),
                'columns' => array(
                    'nombre_CIBV',
                    'entidad_ejecutora',
                    'responsable',
                    'numero_ninos',
                    array(
                        'name' => 'fecha_inicial',
                        'value' => 'Util::FormatDate($data->fecha_inicial, "d/m/Y")'
                    ),
                    array(
                        'name' => 'fecha_fin',
                        'value' => 'Util::FormatDate($data->fecha_fin, "d/m/Y")'
                    ),
                    array(
                        'class' => 'ext.EDataTables.EButtonColumn',
                        'template' => '{actualizar} {pdf} {report}',
                        'htmlOptions' => array('class' => 'span3'),
                        'buttons' => array(
                            'pdf' => array('label' => '<button class="btn btn-warning"><i class="icon-calendar"></i></button>',
                                'options' => array(
                                    'title' => Yii::t('AweCrud.app', 'Exportar PDF'),
                                    "id" => '$data->id',
                                ),
                                'type' => 'raw',
                                'click' => 'js: function(e) { e.preventDefault();exportPDF($(this).attr("id"));}',
                            ),
                            'report' => array('label' => '<button class="btn btn-primary"><i class="icon-inbox"></i></button>',
                                'options' => array(
                                    'title' => Yii::t('AweCrud.app', 'Reportes'),
                                    "id" => '$data->id',
                                ),
                                'type' => 'raw',
                                'url' => 'Yii::app()->createUrl("carta/infoCartaSemanal/reportesMenuSemanal", array("id" => $data->id))',
                            ),
//                            'clonar' => array('label' => '<button class="btn btn-info"><i class="icon-print"></i></button>',
//                                'options' => array(
//                                    'title' => Yii::t('AweCrud.app', 'Duplicar'),
//                                    "id" => '$data->id',
//                                ),
//                                'type' => 'raw',
//                                'visible' => Yii::app()->user->checkAccess("admin") || Yii::app()->user->checkAccess("nutricion") ? 'true' : 'false',
//                                'url' => 'Yii::app()->createUrl("carta/infoCartaSemanal/clonarInfoCartaSemanal", array("id" => $data->id))',
//                            ),
                            'actualizar' => array('label' => '<button class="btn btn-success"><i class="icon-pencil"></i></button>',
                                'options' => array(
                                    'title' => Yii::t('AweCrud.app', 'Update'),
                                    "id" => '$data->id',
                                ),
                                'type' => 'raw',
//                                'visible' =>
//                                (Yii::app()->user->checkAccess("nutricion") || Yii::app()->user->checkAccess("supervisor")) ? (Yii::app()->user->checkAccess("admin")) ?
//                                                ('NiniosInfoCartasemanal::model()->de_Menu_Semanal_id("$data->id") && InfoCartaSemanal::model()->validateTiempoActualizacion("$data->id")') : 'false'  : 'false',
                                'url' => 'Yii::app()->createUrl("carta/infoCartaSemanal/update", array("id" => $data->id))',
                            ),
                        ),
//                           'htmlOptions' => array('overflow'=>'auto')
//                            'width' => Yii::app()->user->checkAccess("admin") ? '190' : Yii::app()->user->checkAccess("supervisor") || Yii::app()->user->checkAccess("nutricion") ? '190' : '95',
//                        ),
                    ),
                ),
            ));
            if (Yii::app()->getRequest()->getIsAjaxRequest()) {
                echo json_encode($widget->getFormattedData(intval($_GET['sEcho'])));
                Yii::app()->end();
                return;
            }
            $this->render('admin', array('widget' => $widget,));
        } else {
            $this->render('empty', array());
        }
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     * @param integer the ID of the model to be loaded
     */
    public function loadModel($id, $modelClass = __CLASS__) {
        $model = InfoCartaSemanal::model()->findByPk((int)$id);
        if ($model === null)
            throw new CHttpException(404, 'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param CModel the model to be validated
     */
    protected function performAjaxValidation($model, $form = null) {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'info-carta-semanal-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }

    /**
     * Función AJAX
     * Busca todos las cartasemanales que pertenescan al infocartasemanal
     * returna un conarray  los id de los menus mas el dia de la semana correspondiente
     * @param int $id del infocartasemanal seleccionado
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     */
    public function actionCargarMenus($id) {
        if (Yii::app()->getRequest()->getIsAjaxRequest()) {
            $menus = CartaSemanal::model()->busquedaMenusICS($id);
            echo CJSON::encode($menus);
        }
    }

    /**
     * Función AJAX
     * Recupera la edad del infoCartaSemanal seleccionado
     * @param int $id del infocartaSemanal selecccionado
     */
    public function actionGetEdadMenu($id) {
        if (Yii::app()->getRequest()->getIsAjaxRequest()) {
            $cartaSemanal = CartaSemanal::model()->de_InfoCartaSemanal_Id($id)->findAll();
//        findAll(array("condition" => "nombre = :nombre", "params" => array(":nombre" => $model->nombre_CIBV)));
            $carta_alimentos = CartaAlimentos::model()->findAll(array("condition" => "carta_nutricional_id= :carta_nutricional_id",
                "params" => array(":carta_nutricional_id" => (int) $cartaSemanal[0]['oldValues']['carta_nutricional_id'])));
            echo CJSON::encode($carta_alimentos[0]['oldValues']['edades_id']);
        }
    }

    /**
     * @author Sofía Mejía <asmejia@utn.edu.ec>
     * @param int $id del info carta semanal para recuperar los menus de los 
     * alimentos que pertenecen a ese menu semanal 
     * renderiza una nueva vista el pdf del menu semanal seleccionado
     */
    public function actionExportarPDF($id) {
        try {
            $datos = InfoCartaSemanal::model()->datos_para_pdf($id);
            if (!empty($datos)) {
                $model = $datos[0];
                $tiempoComida = $datos[1];
                $arregloFechaIni = date_parse($model->fecha_inicial);
                $arregloFechaFin = date_parse($model->fecha_fin);
                $this->layout = "//layouts/mPdf/main_PDF";
                $mPDF = Yii::app()->ePdf->mpdf('utf-8', 'A4-L', 3);
//                $mPDF->debug = true;
//                $mPDF->showImageErrors = true;
                $stylesheet = file_get_contents(Yii::getPathOfAlias('webroot.themes.abound') . '/css/mpdf.css');
                $mPDF->WriteHTML($stylesheet, 1);
                $partial = $this->renderPartial('menuSemanalPDF', array(
                    'model' => $model,
                    'tiempoComida' => $tiempoComida,
                    'arregloFechaIni' => $arregloFechaIni,
                    'arregloFechaFin' => $arregloFechaFin,
                        ), true, false);
                $mPDF->writeHTML($partial, 2);
                $mPDF->addPage();
                $partial2 = $this->renderPartial('portlets/medidas_alimentos', array(
                    'model' => $model,
                    'tiempoComida' => $tiempoComida,
                    'arregloFechaIni' => $arregloFechaIni,
                    'arregloFechaFin' => $arregloFechaFin,
                        ), true, false);
                $mPDF->writeHTML($partial2, 2);
                $mPDF->Output();
            }
        } catch (Exception $exc) {
            Yii::app()->user->setFlash('error', $exc->getMessage());
            $this->redirect('adminInfoCartaSemanal');
        }
    }

    /**
     * Muestra los reportes de los valores nutricionales diarios de un menu semanal   
     * @author Mauricio Chamorro <mchamorro@utn.edu.ec>
     * @param type $id id del menu semanal
     */
    public function actionReportesMenuSemanal($id) {
        $reportes = CartaSemanal::model()->generarReport($id);
        $model = InfoCartaSemanal::model()->findByPk((int) $id);
        $this->render("reports/index", array(
            "reportes" => $reportes, "model" => $model,
        ));
    }

    /**
     * Duplica un menuSemanal para que pueda ser usado en otra fecha
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @param type $id del infoCartaSemanal seleccionado
     */
//    public function actionClonarInfoCartaSemanal($id) {
//        $model = $this->loadModel($id);
////        $model = InfoCartaSemanal::model()->findByPk((int) $id);
//        $modelClonado = new InfoCartaSemanal();
//        $modelClonado->attributes = $model->attributes;
//        if ($modelClonado->save()) {
//            try {
//                CartaSemanal::model()->clonarCartaSemanal($model->id, $modelClonado->id);
//                Yii::app()->user->setFlash('success', "Clonacion exitosa");
//                $this->redirect(array('/carta/infoCartaSemanal/update', 'id' => $modelClonado->id));
////                $this->actionUpdateInfoCartaSemanal(array('infoCartaSemanal' => )); //TODO redirect para cargar url
//            } catch (Exception $e) {
//                Yii::app()->user->setFlash('error', $e->getMessage());
//            }
//        }
//    }
}
